3dhall12i2c 2.2.0
Loading...
Searching...
No Matches
c3dhall12i2c.h
Go to the documentation of this file.
1/****************************************************************************
2** Copyright (C) 2020 MikroElektronika d.o.o.
3** Contact: https://www.mikroe.com/contact
4**
5** Permission is hereby granted, free of charge, to any person obtaining a copy
6** of this software and associated documentation files (the "Software"), to deal
7** in the Software without restriction, including without limitation the rights
8** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9** copies of the Software, and to permit persons to whom the Software is
10** furnished to do so, subject to the following conditions:
11** The above copyright notice and this permission notice shall be
12** included in all copies or substantial portions of the Software.
13**
14** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20** USE OR OTHER DEALINGS IN THE SOFTWARE.
21****************************************************************************/
22
27
28#ifndef C3DHALL12I2C_H
29#define C3DHALL12I2C_H
30
31#ifdef __cplusplus
32extern "C"{
33#endif
34
39#ifdef PREINIT_SUPPORTED
40#include "preinit.h"
41#endif
42
43#ifdef MikroCCoreVersion
44 #if MikroCCoreVersion >= 1
45 #include "delays.h"
46 #endif
47#endif
48
49#include "drv_digital_out.h"
50#include "drv_digital_in.h"
51#include "drv_i2c_master.h"
52
58
63
68
73#define C3DHALL12I2C_REG_NOP 0x00
74#define C3DHALL12I2C_REG_INDIRECT_WR_ADDRESS 0x02
75#define C3DHALL12I2C_REG_INDIRECT_WR_DATA_MSB 0x04
76#define C3DHALL12I2C_REG_INDIRECT_WR_DATA_LSB 0x06
77#define C3DHALL12I2C_REG_INDIRECT_WR_STATUS 0x08
78#define C3DHALL12I2C_REG_INDIRECT_RD_ADDRESS 0x0A
79#define C3DHALL12I2C_REG_INDIRECT_RD_STATUS 0x0C
80#define C3DHALL12I2C_REG_INDIRECT_RD_DATA_MSB 0x0E
81#define C3DHALL12I2C_REG_INDIRECT_RD_DATA_LSB 0x10
82#define C3DHALL12I2C_REG_I2C_LOOP_BACK 0x12
83#define C3DHALL12I2C_REG_I2C_X_Y_8B 0x14
84#define C3DHALL12I2C_REG_I2C_T_Z_8B 0x16
85#define C3DHALL12I2C_REG_I2C_ANGLE_RADIUSSQ_8B 0x18
86#define C3DHALL12I2C_REG_I2C_SIN_COS_8B 0x1A
87#define C3DHALL12I2C_REG_TEMPERATURE 0x1C
88#define C3DHALL12I2C_REG_X_CHANNEL 0x1E
89#define C3DHALL12I2C_REG_Y_CHANNEL 0x20
90#define C3DHALL12I2C_REG_Z_CHANNEL 0x22
91#define C3DHALL12I2C_REG_ANGLE 0x24
92#define C3DHALL12I2C_REG_RADIUS 0x26
93#define C3DHALL12I2C_REG_SINE 0x28
94#define C3DHALL12I2C_REG_COSINE 0x2A
95#define C3DHALL12I2C_REG_X_RAW_FILT_OUT 0x2C
96#define C3DHALL12I2C_REG_Y_RAW_FILT_OUT 0x2E
97#define C3DHALL12I2C_REG_Z_RAW_FILT_OUT 0x30
98#define C3DHALL12I2C_REG_CTRL1 0x32
99#define C3DHALL12I2C_REG_I2C_LOOPB_CONF 0x34
100#define C3DHALL12I2C_REG_CTRL2 0x36
101#define C3DHALL12I2C_REG_CTRL3 0x38
102#define C3DHALL12I2C_REG_CTRL4 0x3A
103#define C3DHALL12I2C_REG_RESERVED 0x3C
104#define C3DHALL12I2C_REG_ACCESS_KEY 0x3E
105 // c3dhall12i2c_reg
107
112
117
122#define C3DHALL12I2C_CTRL1_START_SAMPLE_CLEAR 0x0000
123#define C3DHALL12I2C_CTRL1_START_SAMPLE_SET 0x1000
124#define C3DHALL12I2C_CTRL1_START_SAMPLE_MASK 0x1000
125#define C3DHALL12I2C_CTRL1_INTERRUPT_FLAG_CLEAR 0x0000
126#define C3DHALL12I2C_CTRL1_INTERRUPT_FLAG_SET 0x0800
127#define C3DHALL12I2C_CTRL1_INTERRUPT_FLAG_MASK 0x0800
128#define C3DHALL12I2C_CTRL1_STATUS_READY_CLEAR 0x0000
129#define C3DHALL12I2C_CTRL1_STATUS_READY_SET 0x0400
130#define C3DHALL12I2C_CTRL1_STATUS_READY_MASK 0x0400
131#define C3DHALL12I2C_CTRL1_SLEEP_CNT_0_68_MS 0x0000
132#define C3DHALL12I2C_CTRL1_SLEEP_CNT_1_36_MS 0x0010
133#define C3DHALL12I2C_CTRL1_SLEEP_CNT_6_82_MS 0x0020
134#define C3DHALL12I2C_CTRL1_SLEEP_CNT_13_64_MS 0x0030
135#define C3DHALL12I2C_CTRL1_SLEEP_CNT_68_18_MS 0x0040
136#define C3DHALL12I2C_CTRL1_SLEEP_CNT_136_36_MS 0x0050
137#define C3DHALL12I2C_CTRL1_SLEEP_CNT_681_82_MS 0x0060
138#define C3DHALL12I2C_CTRL1_SLEEP_CNT_1363_64_MS 0x0070
139#define C3DHALL12I2C_CTRL1_SLEEP_CNT_MASK 0x0070
140#define C3DHALL12I2C_CTRL1_OP_MODE_ACTIVE 0x0000
141#define C3DHALL12I2C_CTRL1_OP_MODE_ACTIVE_INT 0x0002
142#define C3DHALL12I2C_CTRL1_OP_MODE_ACTIVE_SAM 0x0004
143#define C3DHALL12I2C_CTRL1_OP_MODE_SLEEP 0x0006
144#define C3DHALL12I2C_CTRL1_OP_MODE_SLEEP_SAM 0x0008
145#define C3DHALL12I2C_CTRL1_OP_MODE_LPDCM_INT 0x000A
146#define C3DHALL12I2C_CTRL1_OP_MODE_LPDCM 0x000C
147#define C3DHALL12I2C_CTRL1_OP_MODE_MASK 0x000E
148
153#define C3DHALL12I2C_CTRL2_INT_THR_MSB_DIR_MASK 0x0F00
154#define C3DHALL12I2C_CTRL2_INT_THR_LSB_DIR_MASK 0x00FF
155
160#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_Z_DIR_EN 0x0000
161#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_Z_DIR_DIS 0x2000
162#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_Z_DIR_MASK 0x2000
163#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_Y_DIR_EN 0x0000
164#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_Y_DIR_DIS 0x1000
165#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_Y_DIR_MASK 0x1000
166#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_X_DIR_EN 0x0000
167#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_X_DIR_DIS 0x0800
168#define C3DHALL12I2C_CTRL3_AFE_CHAN_DIS_X_DIR_MASK 0x0800
169#define C3DHALL12I2C_CTRL3_POL_F_Z_DIR_NORMAL 0x0000
170#define C3DHALL12I2C_CTRL3_POL_F_Z_DIR_INVERTED 0x0400
171#define C3DHALL12I2C_CTRL3_POL_F_Z_DIR_MASK 0x0400
172#define C3DHALL12I2C_CTRL3_POL_F_Y_DIR_NORMAL 0x0000
173#define C3DHALL12I2C_CTRL3_POL_F_Y_DIR_INVERTED 0x0200
174#define C3DHALL12I2C_CTRL3_POL_F_Y_DIR_MASK 0x0200
175#define C3DHALL12I2C_CTRL3_POL_F_X_DIR_NORMAL 0x0000
176#define C3DHALL12I2C_CTRL3_POL_F_X_DIR_INVERTED 0x0100
177#define C3DHALL12I2C_CTRL3_POL_F_X_DIR_MASK 0x0100
178#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_X 0x0000
179#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_Y 0x0008
180#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_Z 0x0010
181#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_ABS_X 0x0018
182#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_ABS_Y 0x0020
183#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_ABS_Z 0x0028
184#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_TEMP 0x0030
185#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_ANGLE 0x0038
186#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_RADIUS 0x0040
187#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_NEW_SAMPLE 0x0048
188#define C3DHALL12I2C_CTRL3_INT_SEL_DIR_MASK 0x0078
189#define C3DHALL12I2C_CTRL3_INT_SIGN_DIR_LESS 0x0000
190#define C3DHALL12I2C_CTRL3_INT_SIGN_DIR_GREATER 0x0004
191#define C3DHALL12I2C_CTRL3_INT_SIGN_DIR_MASK 0x0004
192#define C3DHALL12I2C_CTRL3_INT_FLAG_LATCH_DIR_DIS 0x0000
193#define C3DHALL12I2C_CTRL3_INT_FLAG_LATCH_DIR_EN 0x0002
194#define C3DHALL12I2C_CTRL3_INT_FLAG_LATCH_DIR_MASK 0x0002
195#define C3DHALL12I2C_CTRL3_SAMPLE_INT_POL_DIR_LOW 0x0001
196#define C3DHALL12I2C_CTRL3_SAMPLE_INT_POL_DIR_HIGH 0x0001
197#define C3DHALL12I2C_CTRL3_SAMPLE_INT_POL_DIR_MASK 0x0001
198
203#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_195_5_HZ 0x0000
204#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_391_HZ 0x0100
205#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_782_HZ 0x0200
206#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_1564_HZ 0x0300
207#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_3128_HZ 0x0400
208#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_6256_HZ 0x0500
209#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_12512_HZ 0x0600
210#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_LPM_DIR_MASK 0x0700
211#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_195_5_HZ 0x0000
212#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_391_HZ 0x0010
213#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_782_HZ 0x0020
214#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_1564_HZ 0x0030
215#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_3128_HZ 0x0040
216#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_6256_HZ 0x0050
217#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_12512_HZ 0x0060
218#define C3DHALL12I2C_CTRL4_CIC_BW_SEL_DIR_MASK 0x0070
219#define C3DHALL12I2C_CTRL4_CORDIC_POL_DIR_NORMAL 0x0000
220#define C3DHALL12I2C_CTRL4_CORDIC_POL_DIR_INVERTED 0x0008
221#define C3DHALL12I2C_CTRL4_CORDIC_POL_DIR_MASK 0x0008
222#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_COS_X_SINE_Y 0x0000
223#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_COS_X_SINE_Z 0x0001
224#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_COS_Y_SINE_Z 0x0002
225#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_COS_Y_SINE_X 0x0003
226#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_COS_Z_SINE_X 0x0004
227#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_COS_Z_SINE_Y 0x0005
228#define C3DHALL12I2C_CTRL4_CORDIC_SEL_DIR_MASK 0x0007
229
234#define C3DHALL12I2C_TEMP_SIGN_BIT 0x0800
235#define C3DHALL12I2C_TEMP_SIGN_MASK 0xF000
236#define C3DHALL12I2C_TEMP_RES 8.052
237#define C3DHALL12I2C_TEMP_OFFSET 25.0
238#define C3DHALL12I2C_XYZ_SIGN_BIT 0x4000
239#define C3DHALL12I2C_XYZ_SIGN_MASK 0x8000
240#define C3DHALL12I2C_XYZ_RES_MT 248.2
241#define C3DHALL12I2C_ANGLE_RES_DEG 0.0109863
242
248#define C3DHALL12I2C_DEVICE_ADDRESS 0x65
249 // c3dhall12i2c_set
251
256
261
266#define C3DHALL12I2C_MAP_MIKROBUS( cfg, mikrobus ) \
267 cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
268 cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
269 cfg.sample = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
270 cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
271 // c3dhall12i2c_map // c3dhall12i2c
274
279typedef struct
280{
281 // Output pins
282 digital_out_t sample;
283
284 // Input pins
285 digital_in_t int_pin;
286
287 // Modules
288 i2c_master_t i2c;
289
290 // I2C slave address
292
294
299typedef struct
300{
301 pin_name_t scl;
302 pin_name_t sda;
303
304 pin_name_t sample;
305 pin_name_t int_pin;
306
307 uint32_t i2c_speed;
308 uint8_t i2c_address;
309
311
316typedef struct
317{
319 float x;
320 float y;
321 float z;
322 float angle;
323 float magnitude;
324
326
338
344
355
370
384
396err_t c3dhall12i2c_write_reg ( c3dhall12i2c_t *ctx, uint8_t reg, uint16_t data_in );
397
409err_t c3dhall12i2c_read_reg ( c3dhall12i2c_t *ctx, uint8_t reg, uint16_t *data_out );
410
419void c3dhall12i2c_set_sample_pin ( c3dhall12i2c_t *ctx, uint8_t state );
420
430
439
452
453#ifdef __cplusplus
454}
455#endif
456#endif // C3DHALL12I2C_H
457 // c3dhall12i2c
459
460// ------------------------------------------------------------------------ END
c3dhall12i2c_return_value_t
3D Hall 12 I2C Click return value data.
Definition c3dhall12i2c.h:332
@ C3DHALL12I2C_ERROR
Definition c3dhall12i2c.h:334
@ C3DHALL12I2C_DATA_NOT_READY
Definition c3dhall12i2c.h:335
@ C3DHALL12I2C_OK
Definition c3dhall12i2c.h:333
err_t c3dhall12i2c_default_cfg(c3dhall12i2c_t *ctx)
3D Hall 12 I2C default configuration function.
err_t c3dhall12i2c_init(c3dhall12i2c_t *ctx, c3dhall12i2c_cfg_t *cfg)
3D Hall 12 I2C initialization function.
err_t c3dhall12i2c_read_data(c3dhall12i2c_t *ctx, c3dhall12i2c_data_t *data_out)
3D Hall 12 I2C read data function.
void c3dhall12i2c_set_sample_pin(c3dhall12i2c_t *ctx, uint8_t state)
3D Hall 12 I2C set sample pin function.
void c3dhall12i2c_cfg_setup(c3dhall12i2c_cfg_t *cfg)
3D Hall 12 I2C configuration object setup function.
uint8_t c3dhall12i2c_get_int_pin(c3dhall12i2c_t *ctx)
3D Hall 12 I2C get INT pin function.
err_t c3dhall12i2c_read_reg(c3dhall12i2c_t *ctx, uint8_t reg, uint16_t *data_out)
3D Hall 12 I2C read register function.
err_t c3dhall12i2c_write_reg(c3dhall12i2c_t *ctx, uint8_t reg, uint16_t data_in)
3D Hall 12 I2C write register function.
void c3dhall12i2c_start_measurement(c3dhall12i2c_t *ctx)
3D Hall 12 I2C start measurement function.
3D Hall 12 I2C Click configuration object.
Definition c3dhall12i2c.h:300
pin_name_t sample
Definition c3dhall12i2c.h:304
uint32_t i2c_speed
Definition c3dhall12i2c.h:307
pin_name_t scl
Definition c3dhall12i2c.h:301
pin_name_t int_pin
Definition c3dhall12i2c.h:305
pin_name_t sda
Definition c3dhall12i2c.h:302
uint8_t i2c_address
Definition c3dhall12i2c.h:308
3D Hall 12 I2C Click data object.
Definition c3dhall12i2c.h:317
float magnitude
Definition c3dhall12i2c.h:323
float y
Definition c3dhall12i2c.h:320
float angle
Definition c3dhall12i2c.h:322
float x
Definition c3dhall12i2c.h:319
float z
Definition c3dhall12i2c.h:321
float temperature
Definition c3dhall12i2c.h:318
3D Hall 12 I2C Click context object.
Definition c3dhall12i2c.h:280
digital_out_t sample
Definition c3dhall12i2c.h:282
digital_in_t int_pin
Definition c3dhall12i2c.h:285
i2c_master_t i2c
Definition c3dhall12i2c.h:288
uint8_t slave_address
Definition c3dhall12i2c.h:291